<?php

namespace app\controller;

use support\Request;
use Kingbes\Attribute\Annotation;
use app\model\Admins;
use app\common\Tool;
use app\validate\AdminValidate;

#[Annotation(title: "账号组", auth: true)]
class AdminController
{
    #[Annotation(title: "查询", view: true)]
    public function query(Request $request)
    {
        // 提交
        if ($request->method() === "POST") {
            // 数据
            $param = $request->all();
            // 查询
            $res = Tool::search(Admins::class, $param)
                ->withJoin(['role' => ['role.name' => 'role']], 'left')
                ->paginate([
                    "page" => $param["page"],
                    "list_rows" => $param["limit"],
                ]);
            // 返回
            return json([
                "code" => 0,
                "msg" => "获取成功",
                "count" => $res->total(),
                "data" => $res->toArray()["data"],
            ]);
        }
        // 模板渲染
        return fetch();
    }

    #[Annotation(title: "新增", view: true, auth: true)]
    public function add(Request $request)
    {
        // 提交
        if ($request->method() === "POST") {
            // 数据
            $data = $request->all();
            try {
                // 验证
                validate(validate: AdminValidate::class, scene: "add", data: $data);
                // 加密密码
                $data["password"] = password_hash($data["password"], PASSWORD_DEFAULT);
                // 新增
                $res = Admins::create($data);
                // 返回
                return success(msg: "新增成功", data: $res);
            } catch (\think\exception\ValidateException $e) {
                // 返回验证错误
                return error(
                    msg: $e->getError()["msg"],
                    data: $e->getError()["key"]
                );
            }
        }
        // 输出模板
        return fetch();
    }

    #[Annotation(title: "编辑", auth: true)]
    public function edit(Request $request)
    {
        // 验证
        if ($request->get("id") == 1) {
            return error(msg: "超级管理员不能编辑");
        }
        // 查找
        $find = Admins::find($request->get("id"));
        // 赋值模板
        assign("find", $find);
        // 提交
        if ($request->method() === "POST") {
            // 数据
            $data = $request->all();
            try {
                // 验证
                validate(validate: AdminValidate::class, scene: "edit", data: $data);
                // 加密密码
                if (isset($data["password"]) && $data["password"] != "") {
                    $data["password"] = password_hash($data["password"], PASSWORD_DEFAULT);
                } else {
                    unset($data["password"]);
                }
                // 更新数据
                $res = Admins::update($data);
                // 返回
                return success(msg: "编辑成功", data: $res);
            } catch (\think\exception\ValidateException $e) {
                // 返回验证错误
                return error(
                    msg: $e->getError()["msg"],
                    data: $e->getError()["key"]
                );
            }
        }
        // 输出模板
        return fetch();
    }

    #[Annotation(title: "删除", auth: true)]
    public function del(Request $request)
    {
        // 数据
        $ids = $request->get("ids");
        // 验证 超级管理员
        if (1 == $ids || (is_array($ids) && in_array(1, $ids))) {
            return error(msg: "超级管理员不能删除");
        }
        // 删除
        $destroy = Admins::destroy($ids);
        // 返回
        if ($destroy) {
            return success("删除成功");
        } else {
            return error(msg: "删除失败", data: $ids);
        }
    }
}
